今天我們來讓我們的單據管理系統更上一層樓!
我們今天要新增一項功能:當單據編號相同時,回傳已經有單據編號的訊息
// ---------- 檢查單據編號是否已存在 ----------
var lastRow = sheet.getLastRow();
var billNos = [];
if (lastRow > 1) { // 表示至少有一筆資料(第2列開始)
billNos = sheet.getRange(2, 1, lastRow - 1, 1).getValues().flat();
}
var inputBillNo = billNo.trim().toLowerCase();
billNos = billNos.map(n => String(n).trim().toLowerCase());
if (billNos.includes(inputBillNo)) {
return "錯誤:此單據編號已存在,請使用不同的編號。";
}
getLastRow:取得工作表中最後一列有資料的行數。
var billNos = [];:先宣告一個空陣列,準備存放現有的單據編號。
如果 lastRow > 1,表示除了標題列(第1列)之外,至少有一筆資料。
sheet.getRange(2, 1, lastRow - 1, 1):
從第2列(2)開始
第1欄(1)
共 lastRow - 1 列
取 1 欄
也就是抓取所有現有單據的編號。
getValues() 取得的是一個二維陣列,例如 [[bill1], [bill2]]
flat() 把二維陣列轉成一維陣列 [bill1, bill2],方便後續使用 includes() 判斷。
billNo.trim().toLowerCase():
trim() 去掉使用者輸入前後的空白
toLowerCase() 轉成小寫
這樣可以避免使用者輸入 "AB123" 與 " ab123 " 被誤判為不同單據編號。
billNos.map(n => String(n).trim().toLowerCase()):
把所有已存在的單據編號也統一處理(去空白、小寫、字串化),方便比較。
判斷使用者輸入的單據編號是否已經存在於現有的單據編號中。
如果存在,直接返回錯誤訊息,避免重複新增。